QTableView自定义Model实现排序

您所在的位置:网站首页 qtableview model QTableView自定义Model实现排序

QTableView自定义Model实现排序

2023-03-29 18:22| 来源: 网络整理| 查看: 265

实现排序

(2020-8-26 更新)

排序是⼀个常⽤的功能,QTableView 也可以点击表头进⾏排序,相关接⼝:

//

允许点击排序

ui->tableView->setSortingEnabled(true);

//

按第

0

列升序

ui->tableView->sortByColumn(0,Qt::AscendingOrder);  

但只对 QTableView 进⾏设置还不能⽣效,需要借助 QAbstractItemModel 类的 sort 接⼝(需要重写 sort 接⼝进⾏排序),或者借

助  QSortFilterProxyModel 类(可以重写 lessThan 接⼝⾃定义排序规则)。

Qt 提供的 QAbstractItemModel 及其派⽣类是有 sort 接⼝的,但是没有实现,对于⼀些简单的排序,可以继承并重写这个虚函数:

#include 

//

⾃定义

Model

class MyTableModel : public QAbstractTableModel

{

    Q_OBJECT

public:

    //... ...

    void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override

    {

        if(modelData.isEmpty()||modelData.first().count()tableView);

    QSortFilterProxyModel *proxy_model = new QSortFilterProxyModel(this);

    //

默认排序

role

应该是

dispalyRole

,我们可以修改

    proxy_model->setSortRole(Qt::InitialSortOrderRole);

    proxy_model->setSourceModel(table_model);

    ui->tableView->setModel(proxy_model);

也可以重写 QSortFilterProxyModel 类的 lessThan 接⼝来实现⾃⼰的排序:

#include 

//

⾃定义

SortProxy



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3